package org.ala.tiktools.sharddb.tx;

import java.util.HashMap;
import java.util.Map;

import org.springframework.transaction.support.TransactionSynchronizationManager;

/**
 *	子事务环境，用于替换原 TransactionSynchronizationManager 用法
 *	<p>	因为分布式事务在真实提交时，已经不是当初执行预处理的线程了
 *
 *	@author ala
 *	@date 2025年5月9日
 */
public class ShardTransactionContext {
	/**
	 * 	替换原线程环境
	 */
	protected Map<Object, Object> context = new HashMap<>();
	/**
	 * 	是否存在有效事务
	 */
	protected boolean actualTransactionActive;
	
	
	public ShardTransactionContext() {
		actualTransactionActive = TransactionSynchronizationManager.isActualTransactionActive();
	}
	
	
	@SuppressWarnings("unchecked")
	public <K,V> V getResource(K k) {
		return (V) context.get(k);
	}
	
	public <K,V> void bindResource(K k, V v) {
		context.put(k, v);
	}
	public <K,V> void unbindResource(K k) {
		context.remove(k);
	}
	
	
	/**
	 * 	清空环境
	 */
	public void clear() {
		context.clear();
		context = null;
		
		actualTransactionActive = false;
	}

	public boolean isActualTransactionActive() {
		return actualTransactionActive;
	}

	public void setActualTransactionActive(boolean actualTransactionActive) {
		this.actualTransactionActive = actualTransactionActive;
	}
}
